草庐IT

Android TalkBack 和 fragment 堆栈

全部标签

c - 有没有办法在运行时确定可用的堆栈空间?

我知道堆栈大小是固定的。所以我们不能在堆栈上存储大对象,我们转向动态分配(例如malloc)。此外,当存在函数调用嵌套时会使用堆栈,因此我们也因此避免了递归函数。有没有办法在运行时确定到目前为止使用了多少堆栈内存以及还剩下多少?在这里,我假设使用x86架构的linux环境(gcc编译器)。 最佳答案 有一个pthreadAPI可以确定堆栈的位置:#includevoidPrintStackInfo(void){pthread_attr_tAttributes;void*StackAddress;intStackSize;//Gett

c - 为什么每次运行时堆栈使用量不同而不是固定数量时会发生堆栈溢出?

我正在Debian操作系统上运行一个带有递归调用的程序。我的筹码量是-s:stacksize(kbytes)8192据我所知,堆栈大小必须是固定的,并且应该与每次运行时必须分配给程序的大小相同,除非用ulimit显式更改它。.递归函数递减一个给定的数字,直到它达到0。.这是用Rust编写的。fnprint_till_zero(x:&muti32){*x-=1;println!("Variableis{}",*x);while*x!=0{print_till_zero(x);}}并且值被传递为staticmutY:i32=999999999;unsafe{print_till_zero(

c - 为什么每次运行时堆栈使用量不同而不是固定数量时会发生堆栈溢出?

我正在Debian操作系统上运行一个带有递归调用的程序。我的筹码量是-s:stacksize(kbytes)8192据我所知,堆栈大小必须是固定的,并且应该与每次运行时必须分配给程序的大小相同,除非用ulimit显式更改它。.递归函数递减一个给定的数字,直到它达到0。.这是用Rust编写的。fnprint_till_zero(x:&muti32){*x-=1;println!("Variableis{}",*x);while*x!=0{print_till_zero(x);}}并且值被传递为staticmutY:i32=999999999;unsafe{print_till_zero(

c - 使用 setrlimit() 设置堆栈大小并引发堆栈溢出/段错误

在下面给出的示例中,我尝试将堆栈大小设置为1kb。为什么现在可以在foo()中分配大小为8kb的整数数组?#include#includevoidfoo(void);intmain(){structrlimitlim={1024,1024};if(setrlimit(RLIMIT_STACK,&lim)==-1)return1;foo();return0;}voidfoo(){unsignedints[2048];printf("foo:%u\n",ints[2047]=42);} 最佳答案 立即设置限制,但仅在尝试分配新堆栈或尝试

c - 使用 setrlimit() 设置堆栈大小并引发堆栈溢出/段错误

在下面给出的示例中,我尝试将堆栈大小设置为1kb。为什么现在可以在foo()中分配大小为8kb的整数数组?#include#includevoidfoo(void);intmain(){structrlimitlim={1024,1024};if(setrlimit(RLIMIT_STACK,&lim)==-1)return1;foo();return0;}voidfoo(){unsignedints[2048];printf("foo:%u\n",ints[2047]=42);} 最佳答案 立即设置限制,但仅在尝试分配新堆栈或尝试

java - 如何禁用 Java 堆栈帧优化或使用系统分析器分析堆栈?

系统分析器,如DTrace和Linuxperf_events,能够分析来自JVM的堆栈跟踪。现在,撇开符号(这是另一个问题),DTrace和perf_events都收集了许多只有1帧的堆栈。这些是部分的、不完整的堆栈。我已经尝试过DTracejstack()和Linuxperf_events以及帧指针和dwarf堆栈展开。我相信这是由于热点编译优化的帧。有没有办法禁用此优化,以便标准系统分析器(如SolarisDTrace和Linuxperf)工作?我已经尝试了以下选项:-XX:+DeoptimizeRandom-XX:MaxInlineSize=0-XX:-OmitStackTrac

java - 如何禁用 Java 堆栈帧优化或使用系统分析器分析堆栈?

系统分析器,如DTrace和Linuxperf_events,能够分析来自JVM的堆栈跟踪。现在,撇开符号(这是另一个问题),DTrace和perf_events都收集了许多只有1帧的堆栈。这些是部分的、不完整的堆栈。我已经尝试过DTracejstack()和Linuxperf_events以及帧指针和dwarf堆栈展开。我相信这是由于热点编译优化的帧。有没有办法禁用此优化,以便标准系统分析器(如SolarisDTrace和Linuxperf)工作?我已经尝试了以下选项:-XX:+DeoptimizeRandom-XX:MaxInlineSize=0-XX:-OmitStackTrac

linux - Linux 中 KLIPS 和 Netkey IPSEC 堆栈的区别

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。这个问题似乎不是关于aspecificprogrammingproblem,asoftwarealgorithm,orsoftwaretoolsprimarilyusedbyprogrammers的.如果您认为这个问题是关于anotherStackExchangesite的主题,您可以发表评论,说明问题可能在哪里得到解答。关闭2年前。Improvethisquestion我知道两者都是Linux内核中的IPSEC堆栈,KLIPS较旧而Netkey较新,但除此之外我没有找到它们的其他文档。我想知道它们之

linux - Linux 中 KLIPS 和 Netkey IPSEC 堆栈的区别

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。这个问题似乎不是关于aspecificprogrammingproblem,asoftwarealgorithm,orsoftwaretoolsprimarilyusedbyprogrammers的.如果您认为这个问题是关于anotherStackExchangesite的主题,您可以发表评论,说明问题可能在哪里得到解答。关闭2年前。Improvethisquestion我知道两者都是Linux内核中的IPSEC堆栈,KLIPS较旧而Netkey较新,但除此之外我没有找到它们的其他文档。我想知道它们之

linux - 为什么数据和堆栈段是可执行的?

我刚刚注意到我的简单程序具有可执行的数据和堆栈段。我在/proc/[pid]/maps中看到了它,并且简单的代码证实了它。例如:;prog.asmsection.datacode:db0xCC;int3section.textglobal_start_start:jmpcodemovrax,60;sys_exitmovrdi,0syscall然后nasm-felf64prog.asmld-oprogprog.o./prog使prog执行int3指令。用C编写并使用gcc构建的程序的数据、堆栈和堆不可执行,那么为什么用汇编编写的程序的行为方式不同? 最佳答案